package com.cnap.service;

import com.cnap.db.entity.ApplicationPO;
import com.cnap.model.application.ApplicationDTO;
import com.cnap.model.application.ApplicationVO;
import com.cnap.model.application.QueryApplicationParam;
import com.cnap.model.application.UpdateApplicationParam;
import com.cnap.model.common.PageResult;

/**
 * 应用服务类
 *
 * @author xc
 **/
public interface ApplicationService {

    /**
     * 分页查询应用信息
     *
     * @param queryApplicationParam 请求参数
     * @return 结果
     */
    PageResult<ApplicationVO> findByPage(QueryApplicationParam queryApplicationParam);

    /**
     * 分页查询应用信息
     *
     * @param queryApplicationParam 请求参数
     * @return 结果
     */
    PageResult<ApplicationVO> findByPageForSplit(QueryApplicationParam queryApplicationParam);

    /**
     * 上传应用
     *
     * @param applicationDTO 上传模型
     * @return 模型id
     */
    String uploadApplication(ApplicationDTO applicationDTO);

    /**
     * 保存应用信息(已上传应用包)
     *
     * @param applicationDTO 上传模型
     * @param id appId
     */
    void saveApplicationWithUploadedStatus(ApplicationDTO applicationDTO, String id);

    /**
     * 修改应用信息
     *
     * @param updateApplicationParam 参数
     * @return 结果
     */
    boolean updateApplication(UpdateApplicationParam updateApplicationParam);

    /**
     * 根据id删除其余资源（分片文件，合并文件，解压缩文件，数据库信息）
     *
     * @param applicationId 应用id
     */
    void deleteOtherUploadResourcesByApplicationId(String applicationId);

    /**
     * 删除解压缩文件和数据库信息
     *
     * @param applicationId 应用id
     */
    void deleteUnzipFileAndDbInfo(String applicationId);

    /**
     * 根据id删除所有上传时的资源
     *
     * @param applicationId 应用id
     */
    void deleteAllUploadResourcesByApplicationId(String applicationId);

    /**
     * 根据id更新应用状态
     *
     * @param applicationId 应用id
     * @param status        状态 0：初始，1：页面显示
     */
    void updateApplicationStatus(String applicationId, int status);

    /**
     * 根据id查询应用
     *
     * @param appId 应用id
     * @return 结果
     */
    ApplicationPO selectByAppId(String appId);

    /**
     * 根据id删除应用信息
     *
     * @param applicationId 应用id
     * @return 结果
     */
    boolean deleteApplicationById(String applicationId);
}
